home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / EDITORS / MEMACS / Cmd / Scan < prev    next >
Text File  |  1991-06-15  |  8KB  |  387 lines

  1. ;    SCAN.CMD:    MicroEMACS macro for scanning
  2. ;            SPELL.LST from MicroSPELL 1.0
  3. ;            (C)opyright 1987 by Daniel M Lawrence
  4.  
  5. ;*****    Load up the needed procedures *****
  6.  
  7. store-procedure    getnext
  8. ;    Go to the next entry in the spell list
  9.  
  10. *next
  11.     set %line &add #%slist 1
  12.     set %col #%slist
  13.  
  14.     ; user file name?
  15.     !if &equ %line -2
  16.         set %userlist %col
  17.         !goto next
  18.     !endif
  19.  
  20.     ; if we are all done...
  21.     !if &equ %line -1
  22.         set %done TRUE
  23.         !return
  24.     !endif
  25.  
  26.     ; if we are starting a new file.....
  27.     !if &equ %line 0
  28.         set %cfile %col
  29.         write-message &cat &cat "[Reading " %cfile "]"
  30.         find-file %cfile
  31.         set %cbuffer $cbufname
  32.         set %cfnum &add %cfnum 1
  33.         !goto next
  34.     !endif
  35.  
  36.     ;reset column offset if needed
  37.     !if ¬ &equ %lastline %line
  38.         set %offset 0
  39.     !endif
  40.     set %lastline %line
  41.  
  42.     ;go to it!!!
  43.     set $curline %line
  44.     &add %col %offset forward-character
  45.     set %cwnum &add %cwnum 1
  46. !endm
  47.  
  48. store-procedure doopt
  49. ;Macro for asking and resolving options
  50.  
  51.     ;grab the word
  52.     0 delete-next-word
  53.     yank
  54.     set %word $kill
  55. !force    previous-word
  56.  
  57.     ;next check to see if this should be ignored....
  58.     select-buffer "[ignore]
  59.     beginning-of-file
  60. !force    search-forward &cat &cat "~n" %word "~n"
  61.     set %sstatus $status
  62.     select-buffer %cbuffer
  63.     !if &seq %sstatus TRUE
  64.         !return
  65.     !endif
  66.  
  67.     ;see if this word has been replaced in the past
  68.     select-buffer "[source]
  69.     beginning-of-file
  70. !force    search-forward &cat &cat "~n" %word "~n"
  71.     set %sstatus $status
  72.  
  73.     !if &seq %sstatus TRUE
  74.         set %repline &sub $curline 2
  75.         select-buffer "[replace]"
  76.         set $curline %repline
  77.         set %defrep #"[replace]"
  78.         select-buffer %cbuffer
  79.         set %defflag "*"
  80.         ;check to see if this is a global replacement
  81.         !if &equ &asc %defrep 19
  82.             set %defrep &mid %defrep 2 255
  83.             !goto globalrep
  84.         !endif
  85.     !else
  86.         select-buffer %cbuffer
  87.         set %defrep ""
  88.         set %defflag ""
  89.     !endif
  90.  
  91. *askopt
  92.     run upstat    ;update the dialog window
  93.     clear-message-line
  94.     1 next-window        ;skip to the dialog window
  95.     set $curline 3        ;update the current word & default
  96.     3 redraw-display
  97.     set $curcol 21
  98.     20 delete-next-character
  99.     &sub 20 &len %word insert-space
  100.     insert-string %word
  101.     set $curline 4
  102.     set $curcol 21
  103.     20 delete-next-character
  104.     &sub 20 &len %defrep insert-space
  105.     insert-string %defrep
  106.  
  107.     set $curline 6
  108.     15 delete-next-character
  109.     insert-string "       Option: "
  110.     beginning-of-file
  111.     2 next-window
  112.     update-screen
  113.     set %resp >key
  114.     1 next-window
  115.     set $curline 6
  116.     15 delete-next-character
  117.     15 insert-space
  118.     2 next-window
  119.     update-screen
  120.  
  121.     ;skip just this occurence....
  122.     !if &seq %resp "s"
  123.         !return
  124.     !endif
  125.  
  126.     ;Ignore this mismatch and all like it
  127.     !if &seq %resp "i"
  128.         select-buffer "[ignore]"
  129.         end-of-file
  130.         insert-string %word
  131.         select-buffer %cbuffer
  132.         !return
  133.     !endif
  134.  
  135.     ;Replace this string with the default string
  136.     !if &seq %resp "d"
  137. *globalrep
  138.         0 delete-next-word
  139.         insert-string %defrep
  140.         update-screen
  141.         set %offset &add &sub %offset &len %word &len %repstring
  142.         !return
  143.     !endif
  144.  
  145.     ;Replace this string with another.....
  146.     !if &or &seq %resp "c" &seq %resp "g"
  147.         set $discmd TRUE
  148.         set %repstring ""
  149.         !if &seq %resp "g"
  150.             set %repstring "Globally "
  151.         !endif
  152.         !if &seq %defflag ""
  153.             set %repstring @&cat %repstring "Replace with: "
  154.         !else
  155.             set %repstring @&cat &cat &cat %repstring "Replace with[" %defrep "]: "
  156.             !if &seq %repstring ""
  157.                 set %repstring %defrep
  158.             !endif
  159.         !endif
  160.         set $discmd FALSE
  161.         0 delete-next-word
  162.         insert-string %repstring
  163.         update-screen
  164.         set %offset &add &sub %offset &len %word &len %repstring
  165.         !if &seq %defflag ""
  166.             select-buffer "[source]"
  167.             end-of-file
  168.             insert-string %word
  169.             select-buffer "[replace]"
  170.             end-of-file
  171.             ;if it is a global replace, add this marker
  172.             !if &seq %resp "g"
  173.                 insert-string &chr 19
  174.             !endif
  175.             insert-string %repstring
  176.             select-buffer %cbuffer
  177.         !endif
  178.         !return
  179.     !endif
  180.  
  181.     ;if we are adding this word and it is not to upper case,
  182.     ;...lower case it
  183.     !if &seq %resp "a"
  184.         set %resp "u"
  185.         set %word &lower %word
  186.     !endif
  187.  
  188.     ;Add this word to a user dictionary and ignore it
  189.     !if &seq %resp "u"
  190.         select-buffer "[ignore]"
  191.         end-of-file
  192.         insert-string %word
  193.         select-buffer "[add]"
  194.         end-of-file
  195.         insert-string %word
  196.         select-buffer %cbuffer
  197.         set %addflag TRUE
  198.         !return
  199.     !endif
  200.  
  201.     ;Abort the spell check run
  202.     !if &or &seq %resp "" &seq %resp "q"
  203.         set %done ABORT
  204.         !return
  205.     !endif
  206.  
  207.     write-message ""
  208.     !goto askopt
  209. !endm
  210.  
  211. store-procedure cleanup
  212. ;    Add the requested user words to a user dictionary
  213.  
  214.     !if &seq %addflag TRUE
  215.         !if &seq %userlist ""
  216.             set %userlist @"User dictionary name: "
  217.         !endif
  218.         write-message "[Updating User Dictionary]"
  219.     !force    find-file %userlist
  220.         set %bdict $cbufname
  221.         select-buffer "[add]"
  222.         beginning-of-file
  223.         set-mark
  224.         end-of-file
  225.         kill-region
  226.         select-buffer %bdict
  227.         end-of-file
  228.         yank
  229.         delete-blank-lines
  230.         save-file
  231.     !endif
  232.  
  233.     select-buffer "[ignore]"
  234.     unmark-buffer
  235.     select-buffer "[add]"
  236.     unmark-buffer
  237.     select-buffer "[source]"
  238.     unmark-buffer
  239.     select-buffer "[replace]"
  240.     unmark-buffer
  241.     select-buffer "Dialog Window"
  242.     unmark-buffer
  243.  
  244.     select-buffer %cbuffer
  245.     beginning-of-file
  246.     update-screen
  247. !endm
  248.  
  249. store-procedure upstat
  250. ;    update the dialog window stats
  251.  
  252.     1 next-window
  253.     beginning-of-file
  254.     set $curcol 44
  255.     &len %cfnum delete-previous-character
  256.     insert-string %cfnum
  257.     set $curcol 48
  258.     &len %tfnum delete-previous-character
  259.     insert-string %tfnum
  260.     set $curcol 61
  261.     &len %cwnum delete-previous-character
  262.     insert-string %cwnum
  263.     set $curcol 67
  264.     &len %twnum delete-previous-character
  265.     insert-string %twnum
  266.     next-window
  267. !endm
  268.  
  269. ;    init for spell check run
  270.  
  271.     add-global-mode "blue"
  272.     add-mode "blue"
  273.  
  274. !force    find-file "spell.lst"
  275.     !if ¬ &seq $status TRUE
  276.         write-message "[No file to scan]~n"
  277.         exit-emacs
  278.     !endif
  279.     write-message "[Preparing to Scan]"
  280.  
  281.     select-buffer "[source]"
  282.     unmark-buffer
  283.     select-buffer "[replace]"
  284.     delete-buffer "[source]"
  285.     unmark-buffer
  286.     select-buffer "[add]"
  287.     delete-buffer "[replace]"
  288.     unmark-buffer
  289.     select-buffer "[ignore]"
  290.     delete-buffer "[add]"
  291.     unmark-buffer
  292.     select-buffer "[add]"
  293.     delete-buffer "[ignore]"
  294.     select-buffer "[source]"
  295.     newline
  296.     select-buffer "[replace]"
  297.     select-buffer "[ignore]"
  298.     newline
  299.  
  300.     set $discmd FALSE
  301.     set %slist "spell.lst"
  302.     set %userlist ""
  303.     set %done FALSE
  304.     set %cfile ""
  305.     set %cbuffer ""
  306.     set %lastline -1
  307.     set %addflag FALSE
  308.     delete-other-windows
  309.     select-buffer "spell.lst"
  310.     beginning-of-file
  311.  
  312.     ;init data for the dialog window
  313.     set %cfnum 0
  314.     set %tfnum 0
  315. *nxtfile
  316. !force    search-forward "-1~n"
  317.     !if &seq $status TRUE
  318.         set %tfnum &add %tfnum 1
  319.         !goto nxtfile
  320.     !endif
  321.     set %cwnum 0
  322.     end-of-file
  323.     set %twnum &sub &sub &div &sub $curline 1 2 %tfnum 1
  324.     beginning-of-file
  325.  
  326.     ;set up the dialog window
  327.     1 split-current-window
  328.     7 resize-window
  329.     add-mode "red"
  330.     select-buffer "Dialog Window"
  331.     beginning-of-file
  332.     set-mark
  333.     end-of-file
  334.     kill-region
  335.     insert-string "MicroSPELL 1.0 spell scan           File    /      Word      /     ~n~n"
  336.     insert-string "       Suspect word:                        (S)kip         (C)hange word~n"
  337.     insert-string "Default Replacement:                        (I)gnore       (D)efault replace~n"
  338.     insert-string "                                            (A)dd word     (G)lobal change~n"
  339.     insert-string "                                Add word as (U)pper case   (Q)uit"
  340.     beginning-of-file
  341.     next-window
  342.     clear-message-line
  343.  
  344. *nxtword
  345.  
  346.     run getnext
  347.     !if &seq %done TRUE
  348.         !goto alldone
  349.     !endif
  350.     run doopt
  351.     !if &seq %done FALSE
  352.         !goto nxtword
  353.     !endif
  354.  
  355. *alldone
  356.  
  357.     !if &seq %done "ABORT"
  358.         ;edit up the spell.lst file so we could continue..
  359.         select-buffer "spell.lst"
  360.         2 previous-line
  361.         set-mark
  362.         beginning-of-file
  363.         kill-region
  364.         insert-string &cat &cat "-1~n" %cfile "~n"
  365.         save-file
  366.         select-buffer %cbuffer
  367.         run cleanup
  368.         write-message "[Spell check ABORTED]"
  369.         !if ¬ &seq %rcspell TRUE
  370.             set $discmd TRUE
  371.             save-file
  372.             update-screen
  373.             exit-emacs
  374.         !endif
  375.     !else
  376.         run cleanup
  377.         ;MACHINE DEPENDANT!!!!!!!!!!!!
  378.         shell-command "del spell.lst"
  379.         write-message "[Spell check run complete]~n"
  380.         set $discmd TRUE
  381.         !if ¬ &seq %rcspell TRUE
  382.             quick-exit
  383.         !endif
  384.     !endif
  385.     set $discmd TRUE
  386. !return
  387.